package com.telsoft.hms.function;

import java.util.List;

import org.slf4j.LoggerFactory;

import com.telsoft.hms.data.HMS_Title_DATA;
import com.telsoft.hms.entity.ETT_Title;
import com.telsoft.hms.lib.security.exception.SessionNotExistsException;
import com.telsoft.hms.lib.security.exception.UserNotExistsException;
import com.telsoft.hms.lib.security.server.WsRuntime;
import com.telsoft.hms.lib.security.session.Session;
import com.telsoft.hms.util.SessionUtil;

/**
 * 
 * @author VIETPH (vietph@telsoft.com.vn)
 * @version 1.0
 * 
 */
public class HMS_Title_FUNC {

	private final HMS_Title_DATA titleData;
	private final WsRuntime wsRuntime;

	public HMS_Title_FUNC() {
		super();
		titleData = new HMS_Title_DATA();
		wsRuntime = new WsRuntime();
	}

	/**
	 * Lấy ra danh sách chức danh
	 * 
	 * @param securityKey
	 *            mã bảo mật
	 * @param userName
	 *            tên tài khoản
	 * @return Mảng danh sách chức danh
	 * @throws Exception
	 */
	public ETT_Title[] getListTitle(String securityKey, String userName)
			throws Exception {

		List<ETT_Title> listTitle = null;
		Session session = SessionUtil.getSession(securityKey);
		try {
			listTitle = titleData.getListTitle(session.getLanguageCode(),
					session.getHospitalKey());
		} catch (Exception ex) {
			LoggerFactory.getLogger(HMS_Title_DATA.class).info(ex.getMessage());
			throw ex;
		}
		return listTitle.toArray(new ETT_Title[listTitle.size()]);
	}

	/**
	 * Thêm hoặc cập nhật chức danh
	 * 
	 * @param securityKey
	 *            Mã bảo mật
	 * @param userName
	 *            Tên tài khoản
	 * @param title
	 *            Thực thể chức danh
	 * @return ID chức danh vừa thêm hoặc cập nhật
	 * @throws Exception
	 */
	public long addOrUpdateTitle(String securityKey, String userName,
			ETT_Title title) throws Exception {
		if (title == null) {
			throw new Exception("ERR-0013");
		}
		if (title.getDisplayValue() == null
				|| title.getDisplayValue().trim().isEmpty()) {
			throw new Exception("ERR-0013");
		}
		Session session = SessionUtil.getSession(securityKey);
		try {
			return titleData.addOrUpdateTitle(session.getHospitalKey(), title,
					session.getLanguageCode());
		} catch (Exception ex) {
			LoggerFactory.getLogger(HMS_Title_DATA.class).info(ex.getMessage());
			throw ex;
		}
	}

	/**
	 * Xóa một hay nhiều chức danh
	 * 
	 * @param securityKey
	 *            Mã bảo mật
	 * @param userName
	 *            Tên tài khoản
	 * @param lTitleId
	 *            Mảng danh sách Id chức danh muốn xóa
	 * @throws Exception
	 */
	public void deleteTitle(String securityKey, String userName, long[] lTitleId)
			throws Exception {
		if (lTitleId == null) {
			throw new Exception("ERR-0014");
		}
		if (lTitleId.length <= 0) {
			throw new Exception("ERR-0014");
		}
		Session session = SessionUtil.getSession(securityKey);
		titleData.deleteTitle(session.getHospitalKey(), lTitleId,
				session.getLanguageCode());

	}

	/**
	 * Lấy ra danh sách ngôn ngữ khác của chức danh
	 * 
	 * @param securityKey
	 *            Mã bảo mật
	 * @param userName
	 *            Tên tài khoản
	 * @param titleId
	 *            ID chức danh muốn lấy ngôn ngữ khác
	 * @return Mảng chứa danh sách ngôn ngữ khác chức danh
	 * @throws Exception
	 */
	public ETT_Title[] getListTitleLanguage(String securityKey,
			String userName, long titleId) throws Exception {
		List<ETT_Title> listTitle = null;
		Session session = SessionUtil.getSession(securityKey);
		try {
			listTitle = titleData.getListTitleLanguage(
					session.getHospitalKey(), titleId,
					session.getLanguageCode());
		} catch (Exception ex) {
			LoggerFactory.getLogger(HMS_Title_DATA.class).info(ex.getMessage());
			throw ex;
		}
		return listTitle.toArray(new ETT_Title[listTitle.size()]);
	}

	/**
	 * Thêm mới một ngôn ngữ khác của chức danh
	 * 
	 * @param securityKey
	 *            Mã bảo mật
	 * @param userName
	 *            Tên tài khoản
	 * @param title
	 *            Thực thể ngôn ngữ chức danh muốn thêm
	 * @return Id chức danh vừa thêm ngôn ngữ mới
	 * @throws Exception
	 */
	public long addTitleLanguage(String securityKey, String userName,
			ETT_Title title) throws Exception {
		if (title == null) {
			throw new Exception("ERR-0015");
		}
		if (title.getDisplayValue() == null
				|| title.getDisplayValue().trim().isEmpty()) {
			throw new Exception("ERR-0015");
		}
		Session session = SessionUtil.getSession(securityKey);
		try {
			return titleData.addTitleLanguage(session.getHospitalKey(), title);
		} catch (Exception ex) {
			LoggerFactory.getLogger(HMS_Title_DATA.class).info(ex.getMessage());
			throw ex;
		}
	}

	/**
	 * Cập nhật một ngôn ngữ khác của chức danh
	 * 
	 * @param securityKey
	 *            Mã bảo mật
	 * @param userName
	 *            Tên tài khoản
	 * @param title
	 *            Thực thể ngôn ngữ chức danh muốn cập nhật
	 * @return Id chức danh vừa cập nhật ngôn ngữ
	 * @throws Exception
	 */
	public long updateTitleLanguage(String securityKey, String userName,
			ETT_Title title) throws Exception {
		if (title == null) {
			throw new Exception("ERR-0015");
		}
		if (title.getDisplayValue() == null
				|| title.getDisplayValue().trim().isEmpty()) {
			throw new Exception("ERR-0015");
		}
		Session session = SessionUtil.getSession(securityKey);
		try {
			return titleData.updateTitleLanguage(session.getHospitalKey(),
					title);
		} catch (Exception ex) {
			LoggerFactory.getLogger(HMS_Title_DATA.class).info(ex.getMessage());
			throw ex;
		}
	}

	/**
	 * Xóa một ngôn ngữ của chức danh
	 * 
	 * @param securityKey
	 *            Mã bảo mật
	 * @param userName
	 *            Tên tài khoản
	 * @param titleId
	 *            ID chức danh
	 * @param lLanguageCode
	 *            Mảng danh sách ngôn ngữ của chức danh muốn xóa
	 * @throws Exception
	 */
	public void deleteTitleLanguage(String securityKey, String userName,
			long titleId, int[] lLanguageCode) throws Exception {
		if (lLanguageCode == null) {
			throw new Exception("ERR-0016");
		}
		if (lLanguageCode.length <= 0) {
			throw new Exception("ERR-0016");
		}
		Session session = SessionUtil.getSession(securityKey);
		titleData.deleteTitleLanguage(session.getHospitalKey(), titleId,
				lLanguageCode);
	}

}
